/*
 * 文 件 名:  DateConverter.java
 * 版    权:  Ysten Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved
 * 描    述:  <描述>
 * 修 改 人:  bo.chen
 * 修改时间:  2014年10月24日
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package lv.pig.base.converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.CollectionUtils;

/**
 * <一句话功能简述> <功能详细描述>
 * 
 * @author bo.chen
 * @version [版本号, 2014年10月24日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class DateConverter implements Converter<String, Date>
{
    
    private String format;
    
    private List<String> formats;
    
    @Override
    public Date convert(String source)
    {
        
        if (StringUtils.isEmpty(format) && CollectionUtils.isEmpty(formats))
        {
            return null;
        }
        buildFormats();       
        for (String f : formats)
        {
            try
            {
                SimpleDateFormat sf = new SimpleDateFormat(f);
                return sf.parse(source);
            }
            catch (ParseException e)
            {
                continue;
            }
        }
        return null;
    }
    
    private void buildFormats()
    {
        if (!StringUtils.isEmpty(this.format))
        {
            if (CollectionUtils.isEmpty(this.formats))
            {
                this.formats = new ArrayList<String>();
            }
            this.formats.add(this.format);
        }
    }
    
    /**
     * @return 返回 formats
     */
    public List<String> getFormats()
    {
        return formats;
    }
    
    /**
     * @param 对formats进行赋值
     */
    public void setFormats(List<String> formats)
    {
        this.formats = formats;
    }
    
    /**
     * @return 返回 format
     */
    public String getFormat()
    {
        return format;
    }
    
    /**
     * @param 对format进行赋值
     */
    public void setFormat(String format)
    {
        this.format = format;
    }
    
}
